function [data_filt,err]=wavelet_filter(x,data,limdeb,limfin)


% --------------------------------------------------------------
% Fonction basee sur l'analyse en ondelettes
% d'apres: C. Torrence (January 1998)
% (See "http://paos.colorado.edu/research/wavelets/")
% 
% adaptee pour le filtrage 1D de matrices a deux dimensions
% (ou de donnees formattees et localisees de type lon,lat,data)
%
% 
% INPUT: x: coordonnees x
%         
%      
%        data: donnees (Attention, il ne doit pas y avoir de 
%              donnees manquantes !!!)
%
%        limdeb: Borne inferieure pour la reconstruction 
%                (en unites physiques - identiques a x ou y suivant
%                dim)
%
%        limfin: Borne sup�rieure pour la reconstruction
%                (en unites physiques - identiques a x ou y suivant
%                dim)
%
% OUTPUT: data_filt: donnees filtrees
%      
%
% Programmes necessaires au filtrage: wavelet_filter.m
%                                     wavetest_filter.m
%                                     wavelet.m
%                                     wave_signif.m
%                                     wave_bases.m
%                                     chisquare_inv.m
%                                     chisquare_solve.m
% 
%
% Remarque: Notations basees sur une analyse spatiale mais l'analyse 
% peut etre temporelle.
%
% G. Charria (Mai 2006)
% --------------------------------------------------------------

%init_time=clock;
%disp(' ---- Debut du filtrage ---- ')


% ---- Filtrage en ondelettes

pad = 1;      % pad the time series with zeroes (recommended)
dj = 0.25;    % this will do 4 sub-octaves per octave
j1 = 9/dj;    % this says do 9 powers-of-two with dj sub-octaves each
lag1 = 0.72;  % lag-1 autocorrelation for red noise background
mother = 'Morlet';

    
data_filt(1:size(data,2))=NaN;
err(1:size(data,2))=NaN;
% ---- Verification de valeurs presentes a cette latitude
index=find(isnan(data)==0);      
if (isempty(index)==0)
      
	
   dt=mean(diff(squeeze(x)));
   t0=x(1);
      
	
	
   % ---- Calcul des bornes de reconstruction a partir des
   % valeurs en km dans le cas de l'analyse spatiale
   % Soit calcul de jdeb et jfin a partir de limdeb et limfin.
   s0 = 2*dt; 
   jdeb=round(((log(limdeb/s0))/(dj*log(2.)))+1);
   jfin=round(((log(limfin/s0))/(dj*log(2.)))+1);
   if jfin > j1
      jfin=j1;
   end
    
   % ---- Filtrage par analyse en ondelettes
   [data_filt,err]=wavetest_filter(dt,t0,pad,dj,j1,jdeb,jfin,lag1,mother,data);
      
else
   err=NaN;
   data_filt=NaN;
end     
    
      
% ---- Verification de la reconstruction

%disp(['Temps d''execution:',num2str(etime(clock,init_time)/60),' min'])
%disp(' ---- Fin du filtrage ---- ')
